#pragma once
/***********************************************************************************************
COPYRIGHT 2011 Mafahir Fairoze

This file is part of Neural++.
(Project Website : http://mafahir.wordpress.com/projects/neuralplusplus)

Neural++ is a free software. You can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation, either version 3
of the License, or (at your option) any later version.

Neural++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License <http://www.gnu.org/licenses/> for more details.

***********************************************************************************************/

#include "TrainingSample.h"
#include <vector>

namespace NeuralPlusPlus
	{
	namespace Core        
		{
		/// <summary>
		/// A Training Set represents a set of training samples used during 'batch training' process.
		/// </summary>
		class TrainingSet 
			{
			public: int InputVectorLength;
			public: int OutputVectorLength;
			public: std::vector<TrainingSample*> TrainingSamples;

					/// <summary>
					/// Training Sample Indexer
					/// </summary>
			public: TrainingSample* operator[](int index);

					/// <summary>
					/// Creates a new supervised training set
					/// </summary>
			public: TrainingSet(int inputVectorLength, int outputVectorLength);

					/// <summary>
					/// Adds a new supervised training sample to the training set. If already exists, it will
					/// be replaced.
					/// </summary>
			public: void Add(TrainingSample *sample);

					/// <summary>
					/// Removes all training samples in the training set.
					/// </summary>
			public: void Clear();

					/// <summary>
					/// Deallocates the memory.
					/// </summary>
			public: ~TrainingSet();
			};
		}    
	}